// RAP [rh] SettingsTransfer not supported
///*******************************************************************************
// * Copyright (c) 2006, 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//
//package org.eclipse.ui.internal;
//
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.OutputStreamWriter;
//
//import org.eclipse.core.runtime.IAdaptable;
//import org.eclipse.core.runtime.IPath;
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.core.runtime.MultiStatus;
//import org.eclipse.core.runtime.Status;
//import org.eclipse.jface.dialogs.ErrorDialog;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.ui.IMemento;
//import org.eclipse.ui.IPersistableElement;
//import org.eclipse.ui.IPerspectiveDescriptor;
//import org.eclipse.ui.IViewPart;
//import org.eclipse.ui.IViewReference;
////import org.eclipse.ui.IWorkbench;
//import org.eclipse.ui.IWorkbenchPage;
//import org.eclipse.ui.IWorkbenchPreferenceConstants;
//import org.eclipse.ui.IWorkbenchWindow;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.XMLMemento;
////import org.eclipse.ui.internal.intro.IIntroConstants;
//import org.eclipse.ui.internal.preferences.WorkbenchSettingsTransfer;
//import org.eclipse.ui.internal.presentations.PresentationFactoryUtil;
//import org.eclipse.ui.internal.util.PrefUtil;
//import org.eclipse.ui.internal.util.Util;
//import org.eclipse.ui.presentations.AbstractPresentationFactory;
//import org.eclipse.ui.presentations.IStackPresentationSite;
//
///**
// * The WorkbenchSettings handles the recording and restoring of workbench
// * settings.
// * 
// */
//public class WorkbenchLayoutSettingsTransfer extends WorkbenchSettingsTransfer {
//
//	// private static final String WORKBENCH_LAYOUT_PATH =
//	// ".metadata/.plugins/org.eclipse.ui.workbench/workbench.xml";
//	// //$NON-NLS-1$
//
//	/**
//	 * Create a new instance of the receiver.
//	 */
//	public WorkbenchLayoutSettingsTransfer() {
//		super();
//	}
//
//	/**
//	 * Record the sharable workbench state in a document.
//	 * 
//	 * @return {@link XMLMemento}
//	 */
//	public XMLMemento recordSharableWorkbenchState() {
//		XMLMemento memento = XMLMemento
//				.createWriteRoot(IWorkbenchConstants.TAG_WORKBENCH);
//		IStatus status = saveSettings(memento);
//		if (status.getSeverity() != IStatus.OK) {
//			// don't use newWindow as parent because it has not yet been opened
//			// (bug 76724)
//			ErrorDialog.openError(null,
//					WorkbenchMessages.get().Workbench_problemsSaving,
//					WorkbenchMessages.get().Workbench_problemsSavingMsg, status);
//		}
//		return memento;
//	}
//
//	/**
//	 * Save the settings to the memento.
//	 * 
//	 * @param memento
//	 * @return IStatus
//	 */
//	private IStatus saveSettings(XMLMemento memento) {
//		MultiStatus result = new MultiStatus(PlatformUI.PLUGIN_ID, IStatus.OK,
//				WorkbenchMessages.get().Workbench_problemsSaving, null);
//
//		// Save the version number.
//		memento.putString(IWorkbenchConstants.TAG_VERSION,
//				Workbench.VERSION_STRING[1]);
//
//		// Save the workbench windows.
//		IWorkbenchWindow[] windows = PlatformUI.getWorkbench()
//				.getWorkbenchWindows();
//		for (int nX = 0; nX < windows.length; nX++) {
//			WorkbenchWindow window = (WorkbenchWindow) windows[nX];
//			IMemento childMem = memento
//					.createChild(IWorkbenchConstants.TAG_WINDOW);
//			result.merge(saveState(window, childMem));
//		}
//		return result;
//	}
//
//	/**
//	 * Save the workbench window state.
//	 * 
//	 * @param window
//	 * @param memento
//	 * @return IStatus
//	 */
//	private IStatus saveState(WorkbenchWindow window, IMemento memento) {
//
//		MultiStatus result = new MultiStatus(PlatformUI.PLUGIN_ID, IStatus.OK,
//				WorkbenchMessages.get().WorkbenchWindow_problemsSavingWindow, null);
//
//// RAP [rh] Intro mechanism not supported
////		IWorkbenchPage activePage = window.getActivePage();
////		if (activePage != null
////				&& activePage.findView(IIntroConstants.INTRO_VIEW_ID) != null) {
////			IMemento introMem = memento
////					.createChild(IWorkbenchConstants.TAG_INTRO);
////			boolean isStandby = getWorkbench()
////					.getIntroManager()
////					.isIntroStandby(getWorkbench().getIntroManager().getIntro());
////			introMem.putString(IWorkbenchConstants.TAG_STANDBY, String
////					.valueOf(isStandby));
////		}
//
//		// Save each page.
//		IWorkbenchPage[] pages = window.getPages();
//		for (int i = 0; i < pages.length; i++) {
//			IWorkbenchPage page = pages[i];
//
//			// Save perspective.
//			IMemento pageMem = memento
//					.createChild(IWorkbenchConstants.TAG_PAGE);
//			pageMem.putString(IWorkbenchConstants.TAG_LABEL, page.getLabel());
//			result.add(saveState((WorkbenchPage) page, pageMem));
//
//			if (page == window.getActivePage()) {
//				pageMem.putString(IWorkbenchConstants.TAG_FOCUS, "true"); //$NON-NLS-1$
//			}
//
//			// Get the input.
//			IAdaptable input = page.getInput();
//			if (input != null) {
//				IPersistableElement persistable = (IPersistableElement) Util
//						.getAdapter(input, IPersistableElement.class);
//				if (persistable == null) {
//					WorkbenchPlugin
//							.log("Unable to save page input: " //$NON-NLS-1$
//									+ input
//									+ ", because it does not adapt to IPersistableElement"); //$NON-NLS-1$
//
//				} else {
//					// Save input.
//					IMemento inputMem = pageMem
//							.createChild(IWorkbenchConstants.TAG_INPUT);
//					inputMem.putString(IWorkbenchConstants.TAG_FACTORY_ID,
//							persistable.getFactoryId());
//					persistable.saveState(inputMem);
//				}
//			}
//		}
//
//		return result;
//	}
//
//	/**
//	 * Save the state of the workbench page.
//	 * 
//	 * @param page
//	 * @param pageMem
//	 * @return IStatus
//	 */
//	private IStatus saveState(WorkbenchPage page, IMemento memento) {
//
//		MultiStatus result = new MultiStatus(
//				PlatformUI.PLUGIN_ID,
//				IStatus.OK,
//				NLS
//						.bind(
//								WorkbenchMessages.get().WorkbenchPage_unableToSavePerspective,
//								page.getLabel()), null);
//
//		saveEditorState( memento);
//
//		IMemento viewMem = memento.createChild(IWorkbenchConstants.TAG_VIEWS);
//
//		IViewReference[] refs = page.getViewReferences();
//
//		for (int i = 0; i < refs.length; i++) {
//			IViewReference viewReference = refs[i];
//			String tagId = ViewFactory.getKey(viewReference);
//			if (tagId != null) {
//				IMemento childMem = viewMem
//						.createChild(IWorkbenchConstants.TAG_VIEW);
//				childMem.putString(IWorkbenchConstants.TAG_ID, tagId);
//				String name = viewReference.getPartName();
//				if (name != null) {
//					childMem.putString(IWorkbenchConstants.TAG_PART_NAME, name);
//				}
//			}
//		}
//
//		// Create persp block.
//		IMemento perspectiveMemento = memento
//				.createChild(IWorkbenchConstants.TAG_PERSPECTIVES);
//		if (page.getPerspective() != null) {
//			perspectiveMemento.putString(
//					IWorkbenchConstants.TAG_ACTIVE_PERSPECTIVE, page
//							.getPerspective().getId());
//		}
//		if (page.getActivePart() != null) {
//			if (page.getActivePart() instanceof IViewPart) {
//				IViewReference ref = (IViewReference) page.getReference(page
//						.getActivePart());
//				if (ref != null) {
//					perspectiveMemento.putString(
//							IWorkbenchConstants.TAG_ACTIVE_PART, ViewFactory
//									.getKey(ref));
//				}
//			} else {
//				perspectiveMemento.putString(
//						IWorkbenchConstants.TAG_ACTIVE_PART, page
//								.getActivePart().getSite().getId());
//			}
//		}
//
//		// Save each perspective in opened order
//		IPerspectiveDescriptor[] perspectives = page.getOpenPerspectives();
//
//		for (int i = 0; i < perspectives.length; i++) {
//			IPerspectiveDescriptor perspectiveDescriptor = perspectives[i];
//			IMemento gChildMem = perspectiveMemento
//					.createChild(IWorkbenchConstants.TAG_PERSPECTIVE);
//			Perspective perspective = page
//					.findPerspective(perspectiveDescriptor);
//			perspective.saveState(gChildMem);
//		}
//
//		return result;
//
//	}
//
//	/**
//	 * Save the editor state. Set it to be the defaults.
//	 * 
//	 * @param memento
//	 */
//	private void saveEditorState(IMemento memento) {
//
//		IMemento editorsMemento = memento
//				.createChild(IWorkbenchConstants.TAG_EDITORS);
//		IMemento editorArea = editorsMemento
//				.createChild(IWorkbenchConstants.TAG_AREA);
//		editorArea.putString(IWorkbenchConstants.TAG_ACTIVE_WORKBOOK,
//				EditorSashContainer.DEFAULT_WORKBOOK_ID);
//		IMemento info = editorArea.createChild(IWorkbenchConstants.TAG_INFO);
//		info.putString(IWorkbenchConstants.TAG_PART,
//				EditorSashContainer.DEFAULT_WORKBOOK_ID);
//		IMemento folder = info.createChild(IWorkbenchConstants.TAG_FOLDER);
//		folder.putInteger(IWorkbenchConstants.TAG_APPEARANCE,
//				PresentationFactoryUtil.ROLE_EDITOR);
//		folder.putInteger(IWorkbenchConstants.TAG_EXPANDED,
//				IStackPresentationSite.STATE_RESTORED);
//		IMemento presentation = folder
//				.createChild(IWorkbenchConstants.TAG_PRESENTATION);
//		presentation.putString(IWorkbenchConstants.TAG_ID,
//				getCurrentPresentationClassName());
//
//	}
//
//	/**
//	 * Get the name of the current presentation class name.
//	 * 
//	 * @return String
//	 */
//	private String getCurrentPresentationClassName() {
//
//		// update the current selection (used to look for changes on apply)
//		String currentPresentationFactoryId = PrefUtil.getAPIPreferenceStore()
//				.getString(
//						IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
//		// Workbench.getInstance().getPresentationId();
//
//		AbstractPresentationFactory factory = WorkbenchPlugin.getDefault()
//				.getPresentationFactory(currentPresentationFactoryId);
//
//		if (factory == null)
//			factory = WorkbenchPlugin.getDefault().getPresentationFactory(
//					IWorkbenchConstants.DEFAULT_PRESENTATION_ID);
//		return factory.getClass().getName();
//
//	}
//
//// RAP [rh] unused code	
////	/**
////	 * Return the workbench we are using.
////	 * 
////	 * @return IWorkbench
////	 */
////	private IWorkbench getWorkbench() {
////		return PlatformUI.getWorkbench();
////	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see org.eclipse.ui.preferences.SettingsTransfer#transferSettings(org.eclipse.core.runtime.IPath)
//	 */
//	public IStatus transferSettings(IPath newWorkspaceRoot) {
//		try {
//			File workspaceFile = createFileAndDirectories(newWorkspaceRoot);
//
//			if (workspaceFile == null)
//				return new Status(
//						IStatus.ERROR,
//						WorkbenchPlugin.PI_WORKBENCH,
//						WorkbenchMessages.get().WorkbenchSettings_CouldNotCreateDirectories);
//
//			FileOutputStream stream = new FileOutputStream(workspaceFile);
//			OutputStreamWriter writer = new OutputStreamWriter(stream, "utf-8"); //$NON-NLS-1$
//			XMLMemento memento = XMLMemento
//					.createWriteRoot(IWorkbenchConstants.TAG_WORKBENCH);
//			IStatus status = saveSettings(memento);
//			if (status.getSeverity() != IStatus.OK)
//				return status;
//
//			memento.save(writer);
//			writer.close();
//
//		} catch (IOException e) {
//			return new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH,
//					WorkbenchMessages.get().Workbench_problemsSavingMsg, e);
//
//		}
//
//		return Status.OK_STATUS;
//	}
//
//	/**
//	 * Create the parent directories for the workbench layout file and then
//	 * return the File.
//	 * 
//	 * @param newWorkspaceRoot
//	 * @return File the new layout file. Return <code>null</code> if the file
//	 *         cannot be created.
//	 */
//	private File createFileAndDirectories(IPath newWorkspaceRoot) {
//		IPath newWorkspaceLocation = getNewWorkbenchStateLocation(
//				newWorkspaceRoot).append(
//				Workbench.DEFAULT_WORKBENCH_STATE_FILENAME);
//		File workspaceFile = new File(newWorkspaceLocation.toOSString());
//
//		File parent = workspaceFile.getParentFile();
//		if (!parent.exists()) {
//			if (!parent.mkdirs())
//				return null;
//		}
//
//		return workspaceFile;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see org.eclipse.ui.preferences.SettingsTransfer#getName()
//	 */
//	public String getName() {
//		return WorkbenchMessages.get().WorkbenchLayoutSettings_Name;
//	}
//
//}
